//
// Created by mi on 2024/5/7.
//
#include <atomic>
#include <thread>
#include <iostream>
#include <vector>

std::atomic<bool> data_ready(false); // 用于同步的原子标志
std::vector<int> data; // 共享数据，生产者将数据放入这个容器

void producer() {
    // 生产数据
    data.push_back(42);
    data.push_back(13);
    data.push_back(23);

    // 发布数据，设置data_ready为true
    // 使用memory_order_release保证生产数据的操作不会被重排到这条语句之后
    data_ready.store(true, std::memory_order_release);
}

void consumer() {
    // 等待数据准备好
    // 使用memory_order_acquire保证在这条语句之后的读操作不会被重排到它之前
    while (!data_ready.load(std::memory_order_acquire)) {
        std::this_thread::yield(); // 等待，避免忙等
    }

    // 数据已准备好，消费数据
    for (int val : data) {
        std::cout << "消费者-》收到数据: " << val << std::endl;
    }
}

int main() {
    std::thread producer_thread(producer);
    std::thread consumer_thread(consumer);

    producer_thread.join();
    consumer_thread.join();

    return 0;
}